package smlab.utils
{
    import flash.display.*;

    public class GraphicsUtil extends Object
    {

        public function GraphicsUtil()
        {
            return;
        }
		
		/**
		 * 画虚线
		 * @param target
		 * @param xStart
		 * @param yStart
		 * @param xEnd
		 * @param yEnd
		 * @param dashSize
		 * @param gapSize
		 * 
		 */
		public static function drawDashedLine(target:Graphics, xStart:Number, yStart:Number, xEnd:Number, yEnd:Number, dashSize:Number = 10, gapSize:Number = 10) : void
		{
			var _loc_8:* = dashSize + gapSize;
			var _loc_9:* = xEnd - xStart;
			var _loc_10:* = yEnd - yStart;
			var _loc_11:* = Math.sqrt(Math.pow(_loc_9, 2) + Math.pow(_loc_10, 2));
			var _loc_12:* = Math.floor(Math.abs(_loc_11 / _loc_8));
			var _loc_13:* = Math.atan2(_loc_10, _loc_9);
			var _loc_14:* = xStart;
			var _loc_15:* = yStart;
			_loc_9 = Math.cos(_loc_13) * _loc_8;
			_loc_10 = Math.sin(_loc_13) * _loc_8;
			var _loc_16:int = 0;
			while (_loc_16 < _loc_12)
			{
				
				target.moveTo(_loc_14, _loc_15);
				target.lineTo(_loc_14 + Math.cos(_loc_13) * dashSize, _loc_15 + Math.sin(_loc_13) * dashSize);
				_loc_14 = _loc_14 + _loc_9;
				_loc_15 = _loc_15 + _loc_10;
				_loc_16 = _loc_16 + 1;
			}
			target.moveTo(_loc_14, _loc_15);
			_loc_11 = Math.sqrt((xEnd - _loc_14) * (xEnd - _loc_14) + (yEnd - _loc_15) * (yEnd - _loc_15));
			if (_loc_11 > dashSize)
			{
				target.lineTo(_loc_14 + Math.cos(_loc_13) * dashSize, _loc_15 + Math.sin(_loc_13) * dashSize);
			}
			else if (_loc_11 > 0)
			{
				target.lineTo(_loc_14 + Math.cos(_loc_13) * _loc_11, _loc_15 + Math.sin(_loc_13) * _loc_11);
			}
			target.moveTo(xEnd, yEnd);
			return;
		}

		/**
		 * 绘制变形图像
		 * @param target
		 * @param x
		 * @param y
		 * @param startAngle
		 * @param arc
		 * @param radius
		 * @param yRadius
		 * 
		 */
        public static function drawWedge(target:Graphics, x:Number, y:Number, startAngle:Number, arc:Number, radius:Number, yRadius:Number = NaN) : void
        {
            var _loc_12:Number = NaN;
            var _loc_13:Number = NaN;
            var _loc_14:int = 0;
            var _loc_15:Number = NaN;
            var _loc_16:Number = NaN;
            var _loc_17:Number = NaN;
            var _loc_18:Number = NaN;
            var _loc_19:Number = NaN;
            target.moveTo(x, y);
            if (isNaN(yRadius))
            {
                yRadius = radius;
            }
            if (Math.abs(arc) > 360)
            {
                arc = 360;
            }
            var _loc_8:* = Math.ceil(Math.abs(arc) / 45);
            var _loc_9:* = arc / _loc_8;
            var _loc_10:* = (-_loc_9 / 180) * Math.PI;
            var _loc_11:* = (-startAngle / 180) * Math.PI;
            if (_loc_8 > 0)
            {
                _loc_12 = x + Math.cos(startAngle / 180 * Math.PI) * radius;
                _loc_13 = y + Math.sin((-startAngle) / 180 * Math.PI) * yRadius;
                target.lineTo(_loc_12, _loc_13);
                _loc_14 = 0;
                while (_loc_14 < _loc_8)
                {
                    
                    _loc_11 = _loc_11 + _loc_10;
                    _loc_15 = _loc_11 - _loc_10 / 2;
                    _loc_16 = x + Math.cos(_loc_11) * radius;
                    _loc_17 = y + Math.sin(_loc_11) * yRadius;
                    _loc_18 = x + Math.cos(_loc_15) * (radius / Math.cos(_loc_10 / 2));
                    _loc_19 = y + Math.sin(_loc_15) * (yRadius / Math.cos(_loc_10 / 2));
                    target.curveTo(_loc_18, _loc_19, _loc_16, _loc_17);
                    _loc_14 = _loc_14 + 1;
                }
                target.lineTo(x, y);
            }
            return;
        }

    }
}
